package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class PersistenciaReporteAgencia implements IPersistenciaReporteAgencia {

	private static PersistenciaReporteAgencia instance =null; //variable para crear la instancia de la peristencia reportes agencia	
	private static Connection conn;
	
	private PersistenciaReporteAgencia() {
		
		try {
			Context initContext = new InitialContext();
			DataSource ds = (DataSource)initContext.lookup("java:agencia-db");
			conn = ds.getConnection();
			conn.setAutoCommit(false);			
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public static PersistenciaReporteAgencia getInstance(){
		
		if(instance == null){ //verifica si existe una instancia de la persistencia, sino devuelve la creada anteriormente
			instance = new PersistenciaReporteAgencia();
			
		}
		return instance;
	}
	@Override
	public boolean hacerLogin(String login, String pass) {
		boolean retorno = false;
		try{
			PreparedStatement ps = conn.prepareStatement("Select * from usuario where login ='" + login + "' and password='" + pass + "'");
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				retorno = true;
				
			}
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retorno;
	}
	@Override
	public ArrayList<String> getTotalesDiariosDeVentas(String aniodesde,String mesdesde,String aniohasta,String meshasta,String horariodesde,String horariohasta){
		ArrayList<String> retorno = new ArrayList<String>();
		try{
			//select * from agencia.vendido where fechaVenta >= '2013-10-10 16:00:00' AND fechaVenta <  '2013-10-10 23:00:00'
			//select sum(v2.importe) as Facturado, count(*) as Cantidad,year(v2.fechaVenta) as Anio,month(v2.fechaVenta) as Mes,day(v2.fechaVenta) as Dia,v2.idTerminal from agencia.vendido v2 where v2.fechaVenta >= '2013-10-09 16:00:00' AND v2.fechaVenta <  '2013-10-15 23:59:59' and hour(v2.fechaVenta)<=18  group by year(v2.fechaVenta),month(v2.fechaVenta),day(v2.fechaVenta),hour(v2.fechaVenta),v2.idTerminal,v2.idticket
			//PreparedStatement ps = conn.prepareStatement("select sum(importe) as Facturado, count(*) as Cantidad,day(fechaVenta) as Dia,month(fechaVenta) as Mes,year(fechaVenta) as Anio,idTerminal from agencia.vendido where fechaVenta >= '2013-10-09 16:00:00' AND fechaVenta <  '2013-10-15 23:59:59'  group by year(fechaVenta),month(fechaVenta),day(fechaVenta),idTerminal");
			//PreparedStatement ps = conn.prepareStatement("Select * from Vendido");
			PreparedStatement ps = conn.prepareStatement("select sum(importe) as Facturado, count(*) as Cantidad,day(fechaVenta) as Dia,month(fechaVenta) as Mes,year(fechaVenta) as Anio,idTerminal from agencia.vendido where year(fechaVenta)>="+aniodesde+" and year(fechaVenta)<="+aniohasta+" and month(fechaVenta)>="+mesdesde+" and month(fechaVenta)<="+meshasta+" and hour(fechaVenta)<="+horariohasta+" and hour(fechaVenta)>="+horariodesde+" group by year(fechaVenta),month(fechaVenta),day(fechaVenta),idTerminal");			
			ResultSet rs = ps.executeQuery();			
				while(rs.next()){
					String una = rs.getInt("Dia")+"/"+rs.getInt("Mes")+"/"+rs.getInt("Anio")+" Terminal<"+rs.getString("idTerminal")+">  #"+rs.getInt("Cantidad")+"  $"+rs.getLong("Facturado");
					retorno.add(una);
					System.out.println("SrvAgencia.web.PersistenciaReporte.getTotalesDiariosDeVentas {"+una+"}");
				}
				System.out.println("SrvAgencia.web.PersistenciaReporte.getTotalesDiariosDeVentas ");				
		}catch (SQLException e) {
			System.out.println("SrvAgencia.web.PersistenciaReporte.getTotalesDiariosDeVentas e:");
			e.printStackTrace();
		}/*finally{
			try {
				//conn.close();// sino envia un mensaje por consola diciendo que cerro la conexion y que deberia de cerrarla uno
			} catch (SQLException e) {
				System.out.println("Error, no se logro cerrar la conexion con la BD");
			}
		}	*/
		/*
		Iterator<Usuario> unI = retorno.iterator();
		Usuario unUsuario = null;
		while(unI.hasNext()){
			unUsuario = unI.next();
		}
		*/
		return retorno;		
	}

}
